8.3 更强的列方向转到行方向(单层索引)
学习的df.stack()函数是指定整个列索引层级的数据转换方向,这种方式太过一刀切,不够灵活。因此Pandas提供了一种能指定具体列做转换的函数,分别是pd.melt()和df.melt()
函数,结构如下:
pd.melt(frame,id_vars=None,value_vars=None,var_name=None,value_name=”value",col_level=None,ignore_index=True)
id_vars:指定固定在列方向的列标签,可以是字符串,元组,列表,数组;
value_vars:指定要转换到行方向的列标签,如果没指定,则全部转换;
var_name:对列标签转换成数据的的列命名,默认名称是variable;
value_name:对被转换的列数据转换成数据的列命名,默认名称是value;
col_level:如果列是公层索引,则可以对指定层级标签的列进行转换,此标签必须保持唯一性;
ingore_index:行索引序号是否重新编号,默认为True,表示需要重新编号。
import pandas as pd
df=pd.read_excel(r "D:\Pyobject2023\object\测试\素材\1.8.03 更强的列方向转到行方向(单层索引).xlsx" )
#导入时不需指定索引
print (df)
t=df.melt(id_vars=( "姓名","性别" ),
value_vars= "语文" ,
var_name= "科目" ,
value_name= "分数"
)
print (t)
返回:
姓名 | 性别 | 语文 | 数学 | |
---|---|---|---|---|
0 | 张三 | 男 | 71 | 63 |
1 | 李四 | 女 | 95 | 88 |
2 | 王麻子 | 男 | 77 | 100 |
姓名 | 性别 | 科目 | 分数 | |
---|---|---|---|---|
0 | 张三 | 男 | 语文 | 71 |
1 | 李四 | 女 | 语文 | 95 |
2 | 王麻子 | 男 | 语文 | 77 |